package q1706_findBall;

public class Solution {
    /*
    此题实际上就是模拟每一个小球走过的轨迹
    首先遍历每一个小球 然后依次模拟其走的步骤
     */
    public int[] findBall(int[][] grid) {
        int[] ans = new int[grid[0].length];
        // 遍历每一个小球
        for (int i = 0; i < grid[0].length; ++i) {
            // 记录当前小球出发的位置 以及是否出现了会卡住的flag
            int cur = i;
            boolean flag = false;
            // 遍历小球会经过的每一行的障碍
            for (int j = 0; j < grid.length; ++j) {
                // 如果当前挡板是1 并且右侧没有阻碍 那么cur就移动到右边一个的位置
                if (cur < grid[0].length - 1 && grid[j][cur] == 1 && grid[j][cur + 1] == 1) {
                    ++cur;
                    // 同理左侧没有阻碍就移动到左边
                } else if (cur > 0 && grid[j][cur] == -1 && grid[j][cur - 1] == -1) {
                    --cur;
                } else {
                    // 否则卡住 结束循环
                    ans[i] = -1;
                    flag = true;
                    break;
                }
            }
            if (!flag) {
                // 如果全程没有卡住 那么对应出发的小球最终到达cur列
                ans[i] = cur;
            }
        }
        return ans;
    }
}
